home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 10 / FM Towns Free Software Collection 10.iso / ms_dos / tool / conhlp03 / fswchsrc / setkey.c < prev    next >
Text File  |  1994-11-16  |  2KB  |  89 lines

  1. /*
  2.     setkeyword.c
  3.     KEYWORD 選択 メニュー
  4.     1994/02/28 1994/03/05
  5. */
  6.  
  7. #include "fswch.h"
  8.  
  9. #define LEFT (29)
  10. #define RIGHT (28)
  11. #define UP (30)
  12. #define DOWN (31)
  13. #define EXEC (18)
  14. #define QUIT (17)
  15. #define ESCKEY (0x1b)
  16.  
  17. #define NOM "0m"
  18. #define REV "7m"
  19.  
  20. char us_sk[50]; /* 表示フォーマット */
  21. const int firstline = 14; /* 表示開始行 */
  22. const int w = 4; /* 横並びの数 */
  23.  
  24. void locdisp_sk(int x,char a){
  25.     const char *clr[]={ ESC_RED,ESC_WHITE,ESC_YELLOW,"" };
  26.     const char *d[]={ "なし", "設定", "否定", "" }; /* 選択値 */
  27.     if( a=='R' ) cputs(ESC REV);
  28.     else
  29.     if( a=='N' ) cputs(ESC NOM);
  30.     else return;
  31.     cprintf(us_sk,firstline+(x/w),(x%w)*(80/w),
  32.         keyword[x],clr[skey[x]],d[skey[x]]);
  33. }
  34.  
  35. void setkeyword( void ){ /* 設定メニュー */
  36.     int m,i,b;
  37.     char endf=OFF; /* メニュー終了フラグ */
  38.  
  39.     /* 出力書式の設定 */
  40.     /* %d;%df [ ESC_SKYBULE %-W.Ws/%s%-4.4s ESC_WHITE ] */
  41.     sprintf(us_sk,ESC "%%d;%%df[" ESC_SKYBULE
  42.         "%%-%d.%ds/%%s%%-%d.%ds" ESC_WHITE "]",
  43.         80/w-9,80/w-9,4,4);
  44.  
  45.     /* firstline 以降の消去 */
  46.     cprintf(ESC"%d;0f"ESC"0J",firstline);
  47.  
  48.     /* 設定項目の表示 */
  49.     for(m=0;keyword[m][0]!=NULL;m++)
  50.         locdisp_sk(m,'N'); /* m : 設定項目の数 */
  51.  
  52.     i=b=0;
  53.     /* カーソル選択 */
  54.     while(endf==OFF){
  55.         locdisp_sk(b,'N');
  56.         locdisp_sk(i,'R');
  57.         b = i;
  58.         switch (getop()) {
  59.         case LEFT: /* カーソル ← */
  60.             i = (i+m-1) % m;
  61.             break;
  62.         case RIGHT: /* カーソル → */
  63.             i = (i+1) % m;
  64.             break;
  65.         case UP: /* カーソル ↑ */
  66.             i = (i+m-w) % m;
  67.             break;
  68.         case DOWN: /* カーソル ↓ */
  69.             i = (i+w) % m;
  70.             break;
  71.         case EXEC: /* 実行 key */
  72.         case 0x0d: /* RETkey */
  73.             /* ちょっと危険な設定 OFF SELLECT NONSELLCT */
  74.             /* トグル動作 */
  75.             skey[i] = (skey[i]+1) % 3;
  76.             break;
  77.         case QUIT: /* 取消 key */
  78.         case ESCKEY: /* ESC key */
  79.             endf=ON;
  80.             break;
  81.         default: ;
  82.         } /* switch */
  83.     } /* while(endf==OFF) */
  84.     locdisp_sk(i,'N');
  85.     /* キー選択カウント */
  86.     for(ckey=i=0;i<kno;i++)
  87.         if(skey[i]==SELLECT) ckey++;
  88. }
  89.